﻿using System.Security.Cryptography;
using System.Text;

namespace CIS.Web.Common
{
	/// <summary>
	/// 类名：MD5
	/// 功能：MD5加密
	/// 版本：3.3
	/// 修改日期：2012-07-05
	/// 说明：
	/// 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
	/// 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。
	/// </summary>
	public sealed class AlipayMD5
	{
		public AlipayMD5()
		{
		}

		/// <summary>
		/// 签名字符串
		/// </summary>
		/// <param name="prestr">需要签名的字符串</param>
		/// <param name="key">密钥</param>
		/// <param name="_input_charset">编码格式</param>
		/// <returns>签名结果</returns>
		public static string Sign(string prestr, string key, string _input_charset)
		{
			StringBuilder sb = new StringBuilder(32);

			prestr = prestr + key;

			MD5 md5 = new MD5CryptoServiceProvider();
			byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(prestr));
			for (int i = 0; i < t.Length; i++)
			{
				sb.Append(t[i].ToString("x").PadLeft(2, '0'));
			}

			return sb.ToString();
		}

		/// <summary>
		/// 验证签名
		/// </summary>
		/// <param name="prestr">需要签名的字符串</param>
		/// <param name="sign">签名结果</param>
		/// <param name="key">密钥</param>
		/// <param name="_input_charset">编码格式</param>
		/// <returns>验证结果</returns>
		public static bool Verify(string prestr, string sign, string key, string _input_charset)
		{
			string mysign = Sign(prestr, key, _input_charset);
			if (mysign == sign)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
	}
}